// 这是一个使用chmod函数修改两个制定文件权限的实例，应用代码首先使用stat函数取得argv[1]的指定文件
// 然后使用chmod函数对该文件的权限进行修改，修改为(statbuf.st_mode & ~S_IXGRP)|S_ISGID的运算结果
// 使用chmod函数直接对argv[2]的属性进行修改
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>

int main(int argc, char *argv[]){
	
	// 创建stat的缓冲器，用来记录操作文件的权限
	struct stat statbuf;
	
	int ret;

	// 判断参数输入是否准确
	if(argc != 3){
		printf("Please input the current para!\n");
		return -1;
	}

	// 获取第一个文件的信息
	ret = stat(argv[1], &statbuf);

	if(ret == -1){
		printf("第一个文件的信息获取失败!\n");
		printf("将进行第二个文件信息的获取...\n");
	
	}else{
		printf("文件%s 信息获取成功!\n", argv[1]);
		// 对第一个文件的权限进行修改
		if(chmod(argv[1], (statbuf.st_mode & ~S_IXGRP) | S_ISGID) == -1){
			printf("文件%s 权限修改失败!\n", argv[1]);
		}else{
			printf("文件%s 权限修改成功!\n", argv[1]);
		}
	}
	
	// 对第二个文件进行操作
	printf("获取对%s 文件的操作!\n",argv[2]);

	// 获取第二个文件的信息
	ret = stat(argv[2], &statbuf);

	if(ret == -1){
		printf("第二个文件的信息获取失败!\n");
		printf("文件获取信息失败！将自动退出!\n");
		return -2;
	}else{
		printf("第二个文件信息获取成功！\n");

		// 此时对第二个文件的权限进行修改, S_ISGID表示执行时设置组ID
		if(chmod(argv[2], (statbuf.st_mode & ~S_IXGRP)|S_ISGID) == -1){
			printf("文件%s 权限修改失败!\n",argv[2]);
			return -3;
		}else{
			printf("文件%s 权限修改成功!\n", argv[2]);
			return 0;
		}

	}

	return 0;
	
}
